home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 11 / PC World Interactive 11.iso / share / multimed / MAINACT / DATA1.CAB / Script_Files / sortname.rex < prev    next >
OS/2 REXX Batch file  |  1998-05-04  |  3KB  |  84 lines

  1. /**************************************************************
  2.  *                                                            *
  3.  *                   MainActor Rexx Script                    *
  4.  *                                                            *
  5.  *  Sorts the pictures of a picture list by their name        *
  6.  *  Can be easily modified to sort by any other attribute     *
  7.  *                                                            *
  8.  *  Last modified: 09/29/97, Written by: Markus Moenig        *
  9.  *                                                            *
  10.  **************************************************************/
  11.  
  12.   IF GetGlobalInfo("LOADEDPROJECTS")= "0" THEN DO     /* Check if there are */
  13.    BEGIN                                              /* any projects loaded */
  14.     say "No project loaded! Trying to load project..."/* No: try to load one */
  15.     rc=LoadProject("")                                /* If succeeded, rc = 0 */
  16.     IF rc <> "0" THEN DO
  17.       say "No project loaded! Exiting ..."            /* Failed, exiting ... */
  18.       exit
  19.     END 
  20.    END
  21.  
  22.   IF GetProjectInfo("TYPE") <> "Picture List" THEN DO /* Only works for pictures */
  23.     say "This script needs a picture list! Exiting..."
  24.     exit
  25.    END
  26.  
  27.   /* I use a simple sort routine here, however you can easily write your */
  28.   /* own routine to do the sorting of the pictures. Note that we disable the */
  29.   /* frame container prior to sorting, otherwise the swaping of pictures */
  30.   /* would get very slow (due to the necessary GUI updates) */
  31.  
  32.   ShrinkFactor=13
  33.   frames=GetProjectInfo("FRAMES")
  34.   gap=frames
  35.  
  36.   DisableFrameContainer()    /* Disable the frame container for faster updates */
  37.   DO WHILE (gap > 1) | (finished=1)
  38.    BEGIN
  39.  
  40.     i=0
  41.     finished=1
  42.     gap=(gap * 10) % ShrinkFactor
  43.     IF gap < 1 THEN gap=1
  44.  
  45.     DO WHILE i < (frames - gap)
  46.      BEGIN
  47.       index=i+1               /* index + gapindex now contain the picture numbers */
  48.       gapindex=i+gap+1        /* which shall be compared in this pass */
  49.  
  50.       sname=GetFrameInfo(index, "PICTURENAME") /* Fetch the names of the two pictures */
  51.       dname=GetFrameInfo(gapindex, "PICTURENAME")
  52.  
  53.       IF stricmp(sname, dname) > 0 THEN DO   /* Swap them if a > b, see below */
  54.        say "Swaping" index "with" gapindex
  55.        SwapPictures(index, gapindex)
  56.       END
  57.       finished=0
  58.  
  59.       i=i+1
  60.      END  
  61.    END
  62.   EnableFrameContainer()
  63.  
  64.   say "Ok, the pictures are now sorted by their name!"
  65.   exit
  66.  
  67. /* stricmp() function, thanks to Dr. Dirk Terrel for providing this */
  68. /* stricmp(a,b) returns -1 if a<b, 0 if a=b, and 1 if a>b */
  69.  
  70. stricmp:
  71.   procedure
  72.   arg a,b
  73.   at=Translate(a) /* Convert to uppercase to make the comparison */
  74.   bt=translate(b) /* case insensitive */
  75.   Select
  76.     when at<bt then
  77.        rc=-1
  78.      when at>bt then
  79.        rc=1
  80.    otherwise
  81.        rc=0
  82.   end  /* select */
  83.   return rc
  84.